/*
 * Pedido.java
 *
 * Created on 6 de Janeiro de 2008, 20:29
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package br.uff.javaavancado.modelos;

import java.io.Serializable;
import java.util.Set;
import javax.persistence.*;

/**
 *
 * @author HelioKann
 */
@NamedQueries({@NamedQuery(name = "Pedido.getPorId",
    query = "select p from Pedido p where p.id = ?"),
    @NamedQuery(name = "Pedido.getPedidoPorCliente",
    query = "select p from Pedido p left outer join fetch p.cliente c where c = ?"),
    @NamedQuery(name = "Pedido.getPedidoComItensPedidos",
    query = "select p from Pedido p left outer join fetch p.itens where p = ?")
})
@Entity
@Table(name = "java_pedido")
@SequenceGenerator(name = "Sequencia", sequenceName = "java_pedido_cod_seq")
public class Pedido implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "Sequencia")
    private Long id;
    @ManyToOne(fetch = FetchType.EAGER, optional = false)
    private Cliente cliente;
    private boolean fechado;
    @OneToMany(mappedBy = "pedido", fetch = FetchType.LAZY)
    private Set<ItemPedido> itens;
    private float preco;

    public Pedido() {
    }

    public int getQtdItens(){
        int re = 0;
        if(itens==null || itens.size()==0) return 0;
        for (ItemPedido it : itens) {
            re += it.getQtd();
        }
        return re;
    }
    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public boolean isFechado() {
        return fechado;
    }

    public void setFechado(boolean fechado) {
        this.fechado = fechado;
    }

    public float getPreco() {
        preco = 0;
        if (getItens() != null) {
            for (ItemPedido elem : getItens()) {
                preco += elem.getValor()*elem.getQtd();
            }
        }
        return preco;
    }

    public void setPreco(float preco) {
        this.preco = preco;
    }

    public Set<ItemPedido> getItens() {
        return itens;
    }

    public void setItens(Set<ItemPedido> itens) {
        this.itens = itens;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public boolean equals(Object obj) {
        if(!(obj instanceof Pedido)) return false;
        Pedido p =((Pedido)obj);
        if(p.id == null || this.id == null) return false;
        return  p.id.equals(this.id);
    }
    
    
}
